import { defineConfig } from 'tsup'

export default defineConfig((options) => ({
  // 入口文件
  entry: ['src/main.ts', 'src/consumer.ts', 'src/subscriber.ts'],

  // 输出格式 - 支持 ESM 和 CommonJS
  format: ['esm', 'cjs'],

  // 输出目录
  outDir: 'dist',

  // 清理输出目录
  clean: true,

  // 生成类型声明文件
  dts: true,

  // 生成 source map
  sourcemap: true,

  // 代码分割
  splitting: false,

  // 压缩代码 - 生产环境启用
  minify: options.minify || process.env.NODE_ENV === 'production',

  // 目标环境
  target: 'node18',

  // 平台
  platform: 'node',

  // 外部依赖（不打包进输出文件）
  external: [
    'openai',
    'dotenv'
  ],

  // 开发模式配置
  watch: options.watch,

  // 输出文件名
  outExtension({ format }) {
    return {
      js: `.${format === 'cjs' ? 'cjs' : 'js'}`
    }
  },

  // 环境变量
  env: {
    NODE_ENV: process.env.NODE_ENV || 'production'
  },

  // 横幅注释
  banner: {
    js: '#!/usr/bin/env node'
  },

  // 构建钩子
  onSuccess: async () => {
    console.log('✅ Build completed successfully!')
  },

  // 排除文件
  exclude: [
    '**/*.test.ts',
    '**/*.spec.ts',
    '**/test/**',
    '**/tests/**'
  ],

  // 树摇优化
  treeshake: true,

  // 保留注释
  keepNames: true
}))
